package com.bjpowernode.controller;

import com.bjpowernode.entity.TClue;
import com.bjpowernode.entity.TCustomer;
import com.bjpowernode.query.CustomerQuery;
import com.bjpowernode.result.Result;
import com.bjpowernode.service.CustomerService;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;

/**
 * 客户控制器
 * 处理客户相关的HTTP请求，如客户信息转换、查询等
 */
@RestController
public class CustomerController {
    // 注入客户服务层对象，用于调用业务逻辑
    @Resource
    private CustomerService customerService;

    // 定义POST请求接口，路径为/api/customer，用于客户信息转换操作
    @PostMapping("/api/customer")
    // 接收请求体中的CustomerQuery对象作为参数，返回统一格式的Result响应
    public Result convertCustomer(@RequestBody CustomerQuery customerQuery) {
        // 调用服务层方法执行客户转换业务逻辑
        boolean result = customerService.convertCustomer(customerQuery);
        // 返回操作成功的标准响应结果
        return result ? Result.OK() : Result.FAIL();
    }

    /**
     * 分页查询客户信息
     * @param current 当前页码（用于分页查询）
     * @return 包含客户分页数据的统一响应结果
     */
    @GetMapping("/api/customers")
    public Result getCustomerByPage(Integer current) {
        // 调用服务层分页查询方法，获取客户分页信息
        PageInfo<TCustomer> pageInfo = customerService.getCustomerByPage(current);
        // 返回包含分页数据的成功响应
        return Result.OK(pageInfo);
    }

    /**
     * 根据ID获取客户详情
     * @param id 客户ID（路径变量）
     * @return 包含客户信息的统一响应结果
     */
    @GetMapping("/api/customer/{id}")
    public Result getCustomerById(@PathVariable Integer id) {
        // 调用服务层方法，根据ID查询客户信息
        TCustomer customer = customerService.getCustomerById(id);
        // 将查询到的客户信息封装到统一响应结果中并返回
        return Result.OK(customer);
    }

    /**
     * 导出客户数据到Excel文件
     * @param response HTTP响应对象，用于设置下载相关头信息
     * @param ids 客户ID字符串，多个ID用逗号分隔（可为空，为空时导出全部客户）
     * @throws  当获取响应输出流失败时抛出
     */
    @GetMapping("/api/exportExcel")
    public void exportExcel(HttpServletResponse response, @RequestParam(required = false) String ids) throws IOException {
        // 处理客户ID列表：若ids不为空则分割为字符串列表，否则为null（表示导出全部）
        List<String> idList = null;
        if (StringUtils.hasText(ids)) {
            idList = Arrays.asList(ids.split(","));
        }
        // 设置响应内容类型为Excel文件
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 设置响应头，指定文件下载方式及文件名（使用当前时间戳确保文件名唯一）
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + System.currentTimeMillis() + ".xlsx");
        // 获取响应输出流，用于写入Excel数据
        OutputStream outputStream = response.getOutputStream();
        // 调用服务层导出方法，将客户数据写入Excel并通过输出流返回给客户端
        customerService.exportExcel(outputStream, idList);
    }
}
